package org.hot100.h070;

/**
 * @Author: wjy
 * @Date: 2021/12/27 10:30
 */
public class Solution {

    /**
     * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
     *
     * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
     *
     * 注意：给定 n 是一个正整数。
     *
     * 示例 1：
     *
     * 输入： 2
     * 输出： 2
     * 解释： 有两种方法可以爬到楼顶。
     * 1.  1 阶 + 1 阶
     * 2.  2 阶
     *
     * 示例 2：
     *
     * 输入： 3
     * 输出： 3
     * 解释： 有三种方法可以爬到楼顶。
     * 1.  1 阶 + 1 阶 + 1 阶
     * 2.  1 阶 + 2 阶
     * 3.  2 阶 + 1 阶
     *
     * @param args
     */
    public static void main(String[] args) {

        Solution solution = new Solution();
        System.out.println(solution.climbStairs2(4));

    }

    public int climbStairs(int n) {
        if (n <= 3) {
            return n;
        }
        int temp = 3, a = 0, b = 2;

        for (int i = 4; i <= n; i++) {
            a = b;
            b = temp;
            temp = a + b;
        }

        return temp;
    }

    public int climbStairs2(int n) {
        int a = 0, b = 1, sum = 0;

        for (int i = 1; i <= n; i++) {
            sum = a + b;
            a = b;
            b = sum;
        }

        return sum;
    }

}
